在视图展示的过程中 UIView
和 CALayer
所起到的作用不言而喻,从控件相关的继承关系上来详细看下两者具体的实现过程。
UIView
的主要功能:
- 绘图和动画 (Drawing and animation)
- 实现布局和视图管理 (Layout and subview management)
- 点击事件的处理 (Event handling)
CALyer
的主要功能:
- 视图绘制
- 动画效果
UIView
详解
UIView
的继承关系
下面是 UIView
在类中实现的继承关系图谱:
1 | UIView : UIResponder : NSObject |
由上图我们可以看出 UIView
继承自 UIResponder
最终继承来自 NSObject
的基本类,我们可以实例 UIView
调用相关的功能。
UIView
的绘制和动画
实现图像绘制
在 UIView
中支持我们在其中进行视图的绘制,在使用 Graphices
可以在 UIView 中进行相关绘制具体图形。
代码实现如下(在 UIView 实现实例方法):
(1) 在 UIView 的子类中实现绘制
1 | - (void) drawRect: (CGRect) rect { |
(2) 使用 Core Graphics
进行绘制
1 | - (void) drawRect: (CGRect) rect { |
动画实现
(1)动画的操作 API
1 | + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); |
(2)动画的实现
1 | //动画实现方式一: |
实现布局和视图管理
在视图展示的过程中我们要根据屏幕的大小来对视图相关大小、位置和相对坐标进行适配, UIView
在界面内容展示时配置的主要实现步骤。
当我们手写代码来完成视图相关组合和所有视图管理中,可在 UIViewController
的 View
中进行添加。
1 | CGRect headRect = CGRectMake(20, 20, 60, 60); |
上面代码实现 ImageView
在UIViewController
的 View
中进行添加。
对视图的操作:
1 | - (void)removeFromSuperview;//从父视图移除 |
在
UIView
中可以添加系列的视图来形成视图树,也可以通过一些相关的API
来对其中的视图进行系列操作。
点击事件处理
在 UIView
中可以实现事件处理的机制,目前有手势识别
(1)手势识别
下面给出使用代码:
1 | UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector()]; |
上面代码是实现在视图控制器的 View
上面添加手势识别。当然还有其他中手势识别的类型如下:
1 | UIPanGestureRecognizer : UIGestureRecognizer |
CALayer
详解
CALayer
继承关系
下面给出 CALayer
的继承关系:
1 | CALayer : NSObject <NSSecureCoding, CAMediaTiming> |
从上面可以看出
CALayer
是继承与NSObject
类的实现,对比UIView
继承与UIResponder : NSObject
两者实现。
CALayer
视图绘制
(1)使用 CALayer
直接绘制
代码实现如下:
1 | //自定义图层 |
CALayer
动画
使用 CALayer
实现综合动画
1 | CGAffineTransform transform = CGAffineTransformIdentity; |
参考地址: